The composition of memory components in modern computing systems reflects a trade-off between speed, bulk, and capacity for a given level of expense. For example, the main memory of a computer system is generally a variety of dynamic random access memory. A chip, or stick, of dynamic random access memory provides a moderate amount of storage capacity (e.g., hundreds of Megabytes) in a fairly compact arrangement. This memory can be accessed fairly quickly by a central processor, on the order of a hundred nanoseconds. In contrast, a disk drive, such as a local hard disk drive, has a significantly larger capacity (e.g., hundreds of Gigabytes), but the access time for a given hard disk can be an order of magnitude higher than that of an associated main memory component.
To maximize the speed of information retrieval, modern computers generally rely on a hierarchy of memory ranging from small, low access time solid state memory components to high capacity, but comparatively slow, disk drives. For example, a processor can have one or more associated caches that have extremely low access times and similarly limited capacities. Data that has been recently accessed are placed in the cache from main memory and accessed from that location when needed. This allows the processor to avoid accessing the slower main memory when data is available in the cache.
A cache can have multiple levels, with successive levels having a larger capacity, but requiring a greater amount of time to access. In certain multi-level cache systems, the processor first accesses an index associated with the cache having the lowest access time and capacity, referred to as a first level cache, to determine if the desired data is located in the cache. This index can comprise a content addressable memory, a type of memory storage that includes bit-level comparison logic to facilitate rapid searching of the memory. If the desired data is available at the first level of the cache (e.g., the search results in a “hit”), an associated location is retrieved from the index, and the desired information is retrieved. If the desired data is not found, (e.g., the search results in a “miss”), the system searches storage components associated with lower levels of the memory hierarchy for the desired data.